
/**********************************************************************************\
** 文件名称: Servo.h
** 创建人员: YCG
** 创建日期: 2018-12-13
** 文档描述:
** 版本代号: V0.1
** 版本说明: 初始版本
\********************************************************************************/
#ifndef __SERVO_H_
#define __SERVO_H_

#include	"main.h"
#include	"list.h"

#ifndef HIGH
#define HIGH 1
#define LOW  0
#endif

#define SERSTARTTIME   1.5
#define SERENDTTIME    2.5
#define SERTIMEPERIOD  20

//舵机表头数据结构体
typedef struct
{
    uint16_t  StartCount;       //起始计数值
    uint16_t  MaxCount;         //最大计数值
    uint16_t  AllCount;         //全部计数值
	  uint16_t  Count;            //计数值
    float     OneceCount;       //映射的起始时间
} SerHeadDat_t;

//舵机表头结构体
typedef struct
{
    List_t         List;             //列表头
	  SerHeadDat_t   Dat;       //列表头数据
} SerHead_t;

//舵机列表项数据结构体
typedef struct
{
    GPIO_TypeDef   * Port;    //引脚端口
    uint32_t         Pin;     //引脚
} SerItemDat_t;

//舵机列表项结构体
typedef struct
{
    ListItem_t       ListItem;        //列表头
    SerItemDat_t     Dat;         //表头数据
} SerItem_t;

extern SerHead_t SerHead;


void ServoHeadInit(SerHead_t * const  head, float count, float maxAngle, float startTime, float wideTime, float timeperiod);
void ServoPinInit(SerHead_t* const head, SerItem_t* const Ser, GPIO_TypeDef * Port, uint32_t const Pin);
void ServoSet(SerItem_t* const Ser, float const angle);
uint32_t ServoUpdate(SerHead_t* const head, uint32_t const time);
void SerTimeStart(void);
void Ser_IRQHandler(void);
#endif

/********************************End of File************************************/

